package com.study.bigdata.spark.core.rdd.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{HashPartitioner, SparkConf, SparkContext}

object Scala13_RDD_Operator_Transform{
  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    conf.set("spark.local.dir","D:\\hadoopbook\\spark\\test")
    val sc = new SparkContext(conf)
    // TODO 算子 - 转换 -  K-V类型:partitionBy

    val rdd = sc.makeRDD(List(1,2,3,4),2)
    val rdd1: RDD[(Int, Int)] = rdd.map((_,1))
    // partitionBy算子是根据指定规则对每一条数据进行重新分区，关心数据的分区规则
    // repartition：强调分区数量的变化
    // 下面RDD对象调用partitionBy方法一定会报错
    // 会有二次编译（隐式转换）
    // RDD[k,v]=PairRDDFunctions
    // HashPartitioner是spark中shuffle默认分区器
    rdd1.partitionBy(new HashPartitioner(2)).saveAsTextFile("output")//[2,4][1,3]

    sc.stop()


  }

}
